SK Filter Lab 5

filename = 'sk_lab5.net';
type(filename);
parse;
symbuild
syms s
idn = find(strcmp(yname,'V(out)'));
H = (Gm + Cm*s)\Is;
pretty(H(idn))
% Sallen-Key bandpass filter

V Vs in 0 1
R R1 in 2 30K
R R2 out 2 30K
R R3 3 0 60K
C C1 2 0 0.005u 
C C2  2 3 0.005u
R Rf  out 4 30K
R Ri   4 0 20K
OA u1 3 4 out

(C2 R2 R3 Vs s (Rf + Ri)) / (R1 Ri + R2 Ri - C2 R1 R3 Rf s + C1 R1 R2 Ri s + C2 R1 R2 Ri s +

                                      2
   C2 R2 R3 Ri s + C1 C2 R1 R2 R3 Ri s )
sysbuild
H = (Gm +Cm*s)\Is;
pretty(H(idn))
(334511177977959397353053553110652000000000000 s) /

                                               2
   (20070670678677560827382146445383516569375 s  +

   66902235595591824793653751478447615435882496 s +

   892029807941224925661428730905934460239216640000)
b = [334511177977959397353053553110652000000000000 0];
a = [20070670678677560827382146445383516569375 0 0];
a(2) = 66902235595591824793653751478447615435882496;
a(3) = 892029807941224925661428730905934460239216640000;
f = logspace(2,4,401);
hh = freqs(b,a,f);
freqs_plot(hh,f);
ha = abs(hh);
[hmax idx] = max(ha);
fprintf('max magnitude response %g at %g kHz\n',hmax,f(idx)*1e-3);
hx = hmax/sqrt(2);
N = length(f);
f1 = interp1(ha(1:idx),f(1:idx),hx);
f2 = interp1(ha(idx:N),f(idx:N),hx);
bw = f2-f1;
fprintf('bandwidth %g Hz (f1 %g kHz f2 %g kHz)\n',bw,f1*1e-3,f2*1e-3);
Q = f(idx)/bw;
fprintf('Q %g\n',Q);
hold on;
dbx = 20*log10(hx);
semilogx([f(1) f(N)],[dbx dbx],'k--');
semilogx([f1 f1],[-20 20],'k--');
semilogx([f2 f2],[-20 20],'k--');
hold off;
max magnitude response 4.99989 at 1.05925 kHz
bandwidth 530.609 Hz (f1 0.82841 kHz f2 1.35902 kHz)
Q 1.9963
C = 5e-9;
R = 30e3;
K = 2.5;
f_0 = 1/(R*C)/(2*pi);
fprintf('f_0 = %g (kHz)\n',f_0*1e-3);
fprintf('Q = %g\n',1/(3-K));
fprintf('gain = %g\n',K/(3-K));
clear C R K
f_0 = 1.06103 (kHz)
Q = 2
gain = 5